package Persistencia;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;

import Dominio.ApuestaUsuarioData;
import Dominio.PerfilData;

public class ApuestaUsuarioDAO {

	public static void create(ApuestaUsuarioData user) throws PersistenciaException{
		user.set_fechaApuesta(Calendar.getInstance().getTime());
		int id = user.get_apuesta().get_id();
		int id_user = user.get_user().get_usuario().get_nif();
		String fA = user.get_fechaApuestaString();
		char marca = user.get_marca();
		float cantidad = user.get_cantidad();
		float ratio = user.get_ratio();
		Agente.getAgente().insert("INSERT INTO ApuestaUsuario (id, idUsuario, " +
				"fechaApuesta, apuesta, cantidad, ratio) VALUES (" +
				id + "," + id_user + ",'" + fA + "','" + marca + "'," +
				cantidad + "," + ratio + ")");
	}
	
	public static ArrayList<ApuestaUsuarioData> read(PerfilData user, int filtro)
			throws PersistenciaException{
		String consulta = "SELECT ApuestaUsuario.id," +
				"ApuestaUsuario.fechaApuesta, ApuestaUsuario.apuesta, " +
				"ApuestaUsuario.cantidad, ApuestaUsuario.ratio FROM" +
				" ApuestaUsuario, Apuesta WHERE ApuestaUsuario.id = Apuesta.id " +
				"AND ApuestaUsuario.idUsuario = "+user.get_usuario().get_nif()+" ";
		//0- todas, 1- finalizadas 2- no finalizadas
		switch(filtro){
			case 1:
				consulta += "AND Apuesta.validado = true ORDER BY ApuestaUsuario.fechaApuesta";
				break;
			case 2:
				consulta += "AND Apuesta.validado = false ORDER BY ApuestaUsuario.fechaApuesta";
				break;
			default:
				consulta += "ORDER BY ApuestaUsuario.fechaApuesta";
				break;
		}
		ArrayList<ArrayList<Object>> result = Agente.getAgente().selectList(consulta);
		Iterator<ArrayList<Object>> it = result.iterator();
		ArrayList<Object> aux;
		ArrayList<ApuestaUsuarioData> ret = new ArrayList<ApuestaUsuarioData>();
		int id;
		String fA;
		char marca;
		float cantidad, ratio;
		while(it.hasNext()){
			aux = it.next();
			id = (aux.get(0) != null ? (Integer)aux.get(0) : -1);
			fA = (aux.get(1) != null ? (String)aux.get(1).toString() : "");
			marca = (aux.get(2) != null ? (Character)aux.get(2).toString().charAt(0) : '3');
			cantidad = (aux.get(3) != null ? (Float)aux.get(3) : 0);
			ratio = (aux.get(4) != null ? (Float)aux.get(4) : 0);
			ret.add(new ApuestaUsuarioData(ApuestaDAO.read(id),user,fA,marca,cantidad,ratio));
		}
		return ret;
	}
	
	public static ArrayList<ApuestaUsuarioData> readWiners(int id, char marca) throws PersistenciaException{
		ArrayList<ApuestaUsuarioData> ret = new ArrayList<ApuestaUsuarioData>();
		String consulta = "SELECT id, idUsuario, fechaApuesta, apuesta, cantidad, ratio FROM " +
				"ApuestaUsuario WHERE id = "+id+" AND apuesta = "+marca;
		ArrayList<ArrayList<Object>> result = Agente.getAgente().selectList(consulta);
		ArrayList<Object> tupla = new ArrayList<Object>();
		Iterator<ArrayList<Object>> it = result.iterator();
		int idUsuario;
		String fechaApuesta;
		char apuesta;
		float cantidad, ratio;
		while(it.hasNext()){
			tupla = it.next();
			idUsuario = (tupla.get(1) != null) ? (Integer)tupla.get(1) : 0;
			fechaApuesta = (tupla.get(2) != null) ? (String)tupla.get(2).toString() : "";
			apuesta = (tupla.get(3) != null) ? ((String)tupla.get(3)).charAt(0) : '3';
			cantidad = (tupla.get(4) != null) ? (Float)tupla.get(4) : 0;
			ratio = (tupla.get(5) != null) ? (Float)tupla.get(5) : 0;
			ret.add(new ApuestaUsuarioData(ApuestaDAO.read(id), UserDAO.read(idUsuario),
					fechaApuesta, apuesta, cantidad, ratio));
		}
		return ret;
	}
}
